package plus.easydo.starter.lock.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * lock锁注解
 * @author yuzhanfeng
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedissonRedLock {

    /**
     * key
     *
     * @return java.lang.String[]
     * @author laoyu
     */
    String[] key();
    /**
     * 锁的过期时间,默认是5秒 应设置大于业务处理时间，确保有效时间内处理完业务
     *
     * @return long
     * @author laoyu
     */
    long leaseTime() default 5L;

    /**
     * 尝试加锁，最多等待时间
     *
     * @return long
     * @author laoyu
     */
    long waitTime() default Long.MIN_VALUE;
    /**
     * 锁的时间单位
     *
     * @return java.util.concurrent.TimeUnit
     * @author laoyu
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 解锁失败异常信息
     *
     * @return java.lang.String
     * @author laoyu
     */
    String lockFailedMessage() default "系统繁忙，请稍候再试";
}
